﻿using System;
using System.Collections.Specialized;
using System.ComponentModel.DataAnnotations;
using System.Web.DynamicData;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NotAClue.ComponentModel.DataAnnotations;
using NotAClue.Web.DynamicData;

namespace DD_Extensions
{
    public partial class ForeignKeyCascadeField : System.Web.DynamicData.FieldTemplateUserControl
    {
        private bool _allowNavigation = true;

        public string NavigateUrl
        {
            get;
            set;
        }

        public bool AllowNavigation
        {
            get { return _allowNavigation; }
            set { _allowNavigation = value; }
        }

        protected void Page_Init(object sender, EventArgs e)
        {
            //var pageTemplate = Page.GetPageTemplate();
            //var disableNavigationInAttribute = GetDisableNavigationInAttribute();
            //if (disableNavigationInAttribute != null && (disableNavigationInAttribute.PageTemplate & pageTemplate) == pageTemplate)
            //if (this.IsNavigationDisabled(Column))
            //    HyperLink1.Enabled = false;

            // add tool-tip
            this.SetupTip();

            // add CSS from meta data
            this.ApplyCss();
        }

        //private DisableNavigationInAttribute GetDisableNavigationInAttribute()
        //{
        //    DisableNavigationInAttribute disableNavigationInAttribute;

        //    // get table version of attribute
        //    disableNavigationInAttribute = ForeignKeyColumn.ParentTable.GetAttribute<DisableNavigationInAttribute>();

        //    if (disableNavigationInAttribute != null)
        //        return disableNavigationInAttribute;

        //    // get column version of attribute
        //    disableNavigationInAttribute = ForeignKeyColumn.GetAttribute<DisableNavigationInAttribute>();

        //    if (disableNavigationInAttribute != null)
        //        return disableNavigationInAttribute;

        //    return null;
        //}

        protected string GetDisplayString()
        {
            object value = FieldValue;

            if (value == null)
                return FormatFieldValue(ForeignKeyColumn.GetForeignKeyString(Row));
            else
                return FormatFieldValue(ForeignKeyColumn.ParentTable.GetDisplayString(value));
        }

        protected string GetNavigateUrl()
        {
            if (!AllowNavigation)
                return null;

            if (String.IsNullOrEmpty(NavigateUrl))
                return ForeignKeyPath;
            else
                return BuildForeignKeyPath(NavigateUrl);
        }

        public override Control DataControl
        {
            //get { return HyperLink1; }
            get { return Literal1; }
        }
    }
}
